
#include "stdio.h"
#include "../driver/console.h"

#define isdigit(c)    ((unsigned) ((c) - '0') <  (unsigned) 10)
static void cputch(int c, int *cnt) {
    cons_putc(c);
    (*cnt) ++;
}
int vcprintf(const char *fmt, va_list ap) {
    int cnt = 0;
    vprintfmt((void*)cputch, &cnt, fmt, ap);
    return cnt;
}
/* 
 *
 * printf，这是最经典的函数，在标准输出流上写入数据。
 *
 * 现在它有一个问题，我暂时不知道怎么回事，当可变参里调用多个函数，
 * 输出它们的返回值时，第二个以及后面的都会输出不正常，但在函数外
 * 先接收再使用就不会有问题，看了好久也不明白，就先这样吧！
 */
int printf(const char *fmt, ...) {
    va_list ap;
    int cnt;
    va_start(ap, fmt);
    cnt = vcprintf(fmt, ap);
    va_end(ap);
    return cnt;
}

void cputchar(int c) {
    cons_putc(c);
}

/* *
 * cputs- writes the string pointed by @str to stdout and
 * appends a newline character.
 * */
int cputs(const char *str) {
    int cnt = 0;
    char c;
    while ((c = *str ++) != '\0') {
        cputch(c, &cnt);
    }
    cputch('\n', &cnt);
    return cnt;
}

/* getchar - reads a single non-zero character from stdin */
int getchar(void) {
    int c;
    while ((c = cons_getc()) == 0)
        /* do nothing */;
    return c;
}